

#include "../sc-s/main.h"
#include "../sc-s/lcd.h"
#include "../sc-s/sc-s.h"
#include "../sc-s/utils.h"
#include "../sc-s/trans-s.h"
#include <stdlib.h>

#define HR_ZPB	15		// 1.5%
#define HR_ZNB	25		//-2.5%

#define LR_ZPB	9		// 0.09%
#define LR_ZNB	20		//-2.00%

u16 meas = 0;


#define DEFAULT_AWP_DELAY	45

void awp_check()
{
	static u8 delay1 = 0;
	static u8 delay2 = 0;
	
	if (!Awp)
	{
		if (awp_flags & POWERFLAG)
		{
			ALARM1_OFF;
			ALARM2_OFF;
			return;
		}
		
		if (awp_flags & AL1_FLAG)
		{
			ALARM1_OFF;
		}
		else
		{
			ALARM1_ON;	
		}
		
		if (awp_flags & AL2_FLAG)
		{
			ALARM2_OFF;
		}
		else
		{
			ALARM2_ON;
		}		
		
		return;
	}
	
	
	u8 ok1 = 1;
	u8 ok2 = 1;
	
	if (meas & 0x4000)	// low level
	{
		if (meas & 0x1000)	//minus
		{
			if ((meas & 0x0FFF) > 20)		 //< -20ppm
			{
				ALARM1_OFF;
				ALARM2_OFF;
				return;
			}
		}
		if ((meas & 0x0FFF) > AL1)
		{
			ok1 = 0;
			delay1 = DEFAULT_AWP_DELAY;
		}
		else
		{
			if (delay1)
			{
				delay1 --;
				ok1 = 0;
			}
			if (delay2)
			{
				delay2 --;
				ok2 = 0;
			}
		}
		if ((meas & 0x0FFF) > AL2)
		{
			ok2 = 0;
			ok1 = 0;
			delay2 = DEFAULT_AWP_DELAY;
			delay1 = DEFAULT_AWP_DELAY;
		}
		else
		{
			if (delay2)
			{
				delay2 --;
				ok2 = 0;
			}
		}
		
		if (awp_flags & POWERFLAG)
		{
			ok1 = 0;
			ok2 = 0;
		}
		
		if (ok1 && (!(awp_flags & AL1_FLAG)))
		{
			ALARM1_ON;
		}
		else
		{
			ALARM1_OFF;
		}
		
		if (ok2 && (!(awp_flags & AL2_FLAG)))
		{
			ALARM2_ON;
		}
		else
		{
			ALARM2_OFF;
		}
	}
	
}



void show_high(u16 value, u8 flags)
{
	lcd_home();
	lcd_print("ERR_WYS!");
	return;
}

void show_low(u16 value, u8 flags)
{
	lcd_home();
	char str[10];
	if (! ( value & 0x1000))	// 12 = 0, positiv
	{
		if (value < 3 && (!(flags & 0x80) ) )	// show spec bit 8
		value = 0;
		
		value &= 0x0FFF;
		itoa(value,str,10);
		
#ifdef MEDIA_CON
		if (value > 200  && (!(flags & 0x80) ) && MIN)
#elif MEDIA_COS
		if (value > 999  && (!(flags & 0x80) ) && MIN)
#endif		
		{
			lcd_print(">MAX ppm");
			return;
		}
		
		if (value < 10 )
		{
			lcd_print(" "); 
		}
		
		if (value < 100)
		{
			lcd_print(" ");
		}
		
		lcd_print(str);
		lcd_print("ppmCO");
		return;
	}
	// negativ
	value &= 0x0FFF;		// clear bit 12
	
	if (value < 3 && (!(flags & 0x80) ) )	// show spec bit 8	// 3ppmCO
	{
		value = 0;
	}

	if ( value > 99)
	{
		lcd_print(" ");
	}
	else
	{
		if (value < 10)
		{
			lcd_print(" ");
		}
	}

	itoa(value,str,10 );
	if (value > 0)
	{	
		lcd_print("-");
	}
	else
	{
		lcd_print(" ");
	}
	lcd_print(str);
	if (value < 100)
	{
		lcd_print("ppmCO");
	}
	else
	{
		lcd_print("ppm ");
	}


	return;
	
}

void show_med_low(u16 value)
{
	char str[10];
	if (! ( value & 0x1000))	// 12 = 0, positiv
	{
		value &= 0x0FFF;
		itoa(value,str,10);

		lcd_print(str);
		lcd_print("   ");
		return;
	}
	// negativ
	value &= 0x0FFF;		// clear bit 12
	
	
	itoa(value,str,10);
	if (value > 0)
	{
		lcd_print("-");
	}

	lcd_print(str);
	lcd_print("    ");
	return;
	
}


void show_med_high(u16 value)
{
	lcd_print("ERR");
}


void show_media(u16 value, u8 flags)
{
	lcd_home();
	
	if (debug_data)
	{
		lcd_print("D:");
		char str[10];
		itoa(debug_data,str,10);
		lcd_print(str);
		lcd_print("  ");
		WAITMS(250);
		debug_data = 0;
		return;
	}
	
	

	if (value & 0x4000)
	{
		value &= 0xBFFF;	// 14
		show_low(value,flags);
	}
}
